package primary;

import Utils.SortUtils;

/**
 * 选择排序算法(不断选择剩余元素之中的最小者)
 * 选择排序大约需要 N^2/2次比较和 N次交换
 * @author xiaolu
 * @version 1.0
 * @date 2020/6/1 10:03
 */
public class Selection {

    public static void sort(Comparable[] a){

        int N = a.length;
        for (int i = 0; i < N; i++) {
            int min = i; // 设置最小值的索引
            for (int j = i+1; j < N; j++) {
                // 如果j比min小，最小值索引给i
                if (SortUtils.less(a[j], a[min])){
                    min = j;
                }
                if (min != i){
                    SortUtils.exch(a, i, min);
                }

            }
        }

    }

    public static void main(String[] args) {

        // 测试排序算法
        // Integer[] a = {4, 23, 6, 78, 1, 54, 231, 9, 12};
        Integer[] a = {1, 5, 6, 4, 343, 234};
        sort(a);
        assert SortUtils.isSorted(a);
        SortUtils.show(a);
    }


}
